from __future__ import division
import Levenshtein
from unidecode import unidecode
from Tkinter import *
import ttk, time, win32api,win32gui,pickle,tkMessageBox,os,urllib,ImageGrab,tkFileDialog
import smtplib,base64,time
from pytesser import *
from datoslolking import datoslolking
import Image, ImageTk


##  LoL Stats is an application developed by Luis Rodenas under GNU GPL v3 Open Source License
##  Oficial webpage of the project: http://code.google.com/p/lol-leagueoflegends-stats/
##
##  historial[player]=[gameswithhim,victorieswithhim,gamesvshim,victoriesvshim,puntuacion,troll,afk]
##  opciones=[playername,siguientetamanohistorial,idioma,lolfolder,playernamereal,server]
##  


def comprobarversion():
    try:
##        Puede que dropbox cambie enlace con el tiempo...
        dirversionfile='https://dl.dropbox.com/s/q2hi87smhcl4gi8/version.txt?dl=1'
        versionnueva = urllib.urlopen(dirversionfile).read()
        versionnueva=float(versionnueva)
        if versionnueva>version:
            tkMessageBox.showinfo(title='LoL Stats - AutoUpdate',detail=dic[04],icon='info',message=dic[05])
    except:
        pass

def enviarhistorialgmail():
    try:
        filename = "historial.txt"
        jugnombre=unidecode(opciones[0])
# Read a file and encode it into base64 format
        fo = open(filename, "rb")
        filecontent = fo.read()
        fo.close()
        encodedcontent = base64.b64encode(filecontent)  # base64

        sender = 'lolstatsapp@gmail.com'
        reciever = 'lolstatsapp@gmail.com'

        marker = "AUNIQUEMARKER"

        body ="""
Historial {0} del jugador {1} enviado por LoL Stats.
""".format(len(historial),jugnombre)
# Define the main headers.
        part1 = """From: LoLStats <luisonoff@gmail.com>
To: Developer
Subject: LoL Stats Historial %s
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (opciones[1],marker, marker)

# Define the message action
        part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# Define the attachment section
        part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
        message = part1 + part2 + part3
        username = 'lolstatsapp@gmail.com'  
        password = '123698745123698745' 
        try:
           smtpObj = smtplib.SMTP('smtp.gmail.com:587')
           smtpObj.starttls()
           smtpObj.login(username,password)  
           smtpObj.sendmail(sender, reciever, message)
           smtpObj.quit()  
##           print "Successfully sent email"
        except Exception:
            pass
##           print "Error: unable to send email"
    except:
        pass

def comprobarhistorialgrande():
    try:
        global opciones
        if len(historial)>opciones[1]:
            enviarhistorialgmail()
            opciones[1]+=200
            file = open('config.txt', 'w')
            pickle.dump(opciones, file)
            file.close()
    except:
        pass
    
def esquinaspantalla(*args):
    try:
        global evitabucleocr
        try:
            indexventana= win32gui.FindWindow(None,'PVP.net Client')
            win32gui.SetForegroundWindow(indexventana) 
            esquinas=win32gui.GetWindowRect(indexventana)
  
        except:
            indexventana= win32gui.FindWindow(None,'Cliente PVP.net')
            win32gui.SetForegroundWindow(indexventana)
            esquinas=win32gui.GetWindowRect(indexventana)
        evitabucleocr=0
        return esquinas
    except:
        textoinfo.set(dic[01])
        pass

def imprimepantalla(*args):
    try:
##        import ImageGrab
        img = ImageGrab.grab()
        img.save('lol1.png','PNG')
    except:
        textoinfo.set(dic[01])
        pass

def ocr(esquinas):
    try:
        global jugadores, evitabucleocr, indexpropio
        jugadores=[]
        for i in range(0,5):
            a=image_file_to_string("corte{0}.jpg".format(i))
            if "\n" in a:
                b=a.strip('\n')
            jugadores.append(b)
##        ratiomax=0
##        for i in range(5):
##            ratiotemp=Levenshtein.ratio(jugadores[i],opciones[0])
##            if ratiotemp>0.6 and ratiotemp>ratiomax:
##                j=i
##                ratiomax=ratiotemp
####                print ratiomax
        mejoraocr()
        if opciones[0] in jugadores:
            indexpropio=jugadores.index(opciones[0])
            jugadores.remove(opciones[0])
##            print 'A la primera'
        elif evitabucleocr==0:
##            print 'en bucle'
            evitabucleocr=1
            imprimepantalla()
            cortaimagen(esquinas)
            ocr()
        else:
            pass

    except:
        textoinfo.set(dic[01])
        pass

def mejoraocr():
    try:
        global jugadores
        for i in range(len(jugadores)):
            if "\n" in jugadores[i]:
                jugadores[i].replace("\n","")
                
##    Aqui puede haber errores
        listanombres=historial.keys()
        if opciones[0] in listanombres:
            pass
        else:
            listanombres.append(opciones[0])
        for i in range(len(jugadores)):
            ratiomax=0
            distmin=3
            for j in range(len(listanombres)):
                disttemp=Levenshtein.distance(jugadores[i],listanombres[j])
                if disttemp<distmin:
                    indicebueno=j
                    distmin=disttemp
                elif disttemp==distmin:
                    ratiotemp=Levenshtein.ratio(jugadores[i],listanombres[j])
                    if ratiotemp>ratiomax:
                        indicebueno=j
                        ratiomax=ratiotemp

            if distmin<3 or ratiomax>=0.3:
                jugadores[i]=listanombres[indicebueno]

    except:
        textoinfo.set(dic[01])
        pass

def nombresmanual(*args):
    try:
        global jugadoresocr,nm
##        nm = Tk()
        nm = Toplevel(root)
        nm.title("LoL Stats - Check player names")
        nm.geometry('-10+50')
        nmframe = ttk.Frame(nm, padding="20 0 20 20")
        nmframe.grid(column=0, row=0, sticky=(N, W, E, S))

        fuente='Sans-serif'
        tamano='16'
        ##        ttk.Label(tframe, text=dic[12], font="{0} {1} bold".format(fuente,tamano)).grid(column=1, row=1, sticky=(W), ipady=15)
##        jugadores=['LuisOnOff','Pepe','Lucas','Ermenegildo','a87sd']
        jugadoresocr=[0,0,0,0,0]
        suma=0
        for i in range(len(jugadores)):
            try:
                if i==indexpropio:
                    suma=1
        
                im = Image.open('cortemini{0}.jpg'.format(i+suma))
                corte = ImageTk.PhotoImage(im)
                label=Label(nmframe, image=corte)
                label.image=corte
                label.grid(column=1, row=i+1, sticky=(W), ipady=18)#Determina la altura de las filas  
            except:
                pass
            jugadoresocr[i]=StringVar()
            jugadoresocr[i].set(jugadores[i])
                                
            ttk.Label(nmframe, text='=',font="{0} {1} bold".format(fuente,tamano)).grid(column=2, row=i+1, sticky=(W))
                                
            jugadorocr = ttk.Entry(nmframe, width=30, textvariable=jugadoresocr[i])
            jugadorocr.grid(column=3, row=i+1, sticky=(W))

        botoncontinuar=ttk.Button(nmframe, text=dic[47], command=botoncorregirnombres)
        botoncontinuar.grid(column=1,columnspan=3, row=6)
            

        for child in nmframe.winfo_children(): child.grid_configure(padx=2, pady=5)
##        nm.mainloop() 
    except:
        textoinfo.set(dic[01])
        pass

def obteninfo():
    try:
        global infojugadores
        infojugadores=[0,0,0,0,0]
        textoinfo.set(dic[43])
        root.update_idletasks()
        for i in range(len(jugadores)):
            infojugadores[i]=datoslolking(jugadores[i],opciones[5])
##        print jugadores
##        print infojugadores

    except:
        textoinfo.set(dic[01])
        pass

def cortaimagen(esquinas):
    try:
        alto=esquinas[3]-esquinas[1]
        ancho=esquinas[2]-esquinas[0]
        salto=round(0.125*alto)
        sepizquierda=round(0.025*ancho)
        separriba=round(0.17*alto)
        sepderecha=round(0.175*ancho)
        sepabajo=round(0.192*alto)
        im = Image.open('lol1.png')
        for i in range(0,5):
            box=[esquinas[0]+int(sepizquierda),esquinas[1]+int(separriba+i*salto),esquinas[0]+int(sepderecha),esquinas[1]+int(sepabajo+i*salto)]
            grande=((box[2]-box[0])*20,(box[3]-box[1])*20)
            grande2=((box[2]-box[0])*2,(box[3]-box[1])*2)
            region=im.crop(box)
            region2=region.resize(grande2,Image.BICUBIC)
            region2.save("cortemini{0}.jpg".format(i), "JPEG")
            region=region.resize(grande,Image.BICUBIC)
            region.save("corte{0}.jpg".format(i), "JPEG")

##        textoinfo.set('Obteniendo informacion...')
    except:
        textoinfo.set(dic[01])
        pass

def leerhistorial(*args):
    try:
        global historial
        file=open('historial.txt', 'r')
        historial = pickle.load(file)
        file.close()
##        return historial
    except:
        historial={}
##        De prueba en vdd estara vacio
##        historial={'LuisOnOff':[1,1,3,3,0,0,0],'Pepe':[20,9,5,2,0,0,0]}
##        return historial

def leerdic(*args):
    try:
        global dic
        try:
            file=open('config.txt', 'r')
            opciones = pickle.load(file)
            file.close()
            if opciones[2]==0:
                dicfile='en_US.txt'
            if opciones[2]==1:
                dicfile='es_ES.txt'
        except:
            dicfile='en_US.txt'
        file=open(dicfile, 'r')
        dic = pickle.load(file)
        file.close()
    except:
        textoinfo.set(dic[01])
        pass

def cargaropciones(*args):
    try:
        global opciones
        file=open('config.txt', 'r')
        opciones = pickle.load(file)
        file.close()
        if len(opciones)<6:
            textoinfo.set(dic[06])
            if len(historial)>100:
                opciones=['',round(len(historial),-2),0,"C:/Riot Games/League of Legends",'','euw']
            else:
                opciones=['',100,0,"C:/Riot Games/League of Legends",'','euw']
    except:
        if len(historial)>100:
            opciones=['',round(len(historial),-2),0,"C:/Riot Games/League of Legends",'','euw']
        else:
            opciones=['',100,0,"C:/Riot Games/League of Legends",'','euw']
        textoinfo.set(dic[06])


def guardaropciones(nombre,c,idioma,server):
    try:
        global opciones
        opciones[0]=unidecode(nombre.get())
        opciones[4]=nombre.get()
        opciones[5]=server.get()
        opciones[2]=int(idioma.get())
##        Guardo fichero config.txt
        file = open('config.txt', 'w')
        pickle.dump(opciones, file)
        file.close()
        leerdic()
        c.destroy()
        textoinfo.set(dic[03])
    except:
        textoinfo.set(dic[01])
##        print 'Error'
        pass

def cambiarfolder(foldername):
    try:
        global opciones
        dirname = tkFileDialog.askdirectory(parent=root,initialdir="/",title=dic[39])
        opciones[3]=dirname
        foldername.set(opciones[3])
    except:
        textoinfo.set(dic[01])
        pass

def opciones():
    try:
        c = Toplevel(root)
        c.title("LoL Stats - Configuration")
        c.geometry('-5+50')
        cframe = ttk.Frame(c, padding="20 20 20 20")
        cframe.grid(column=0, row=0, sticky=(N, W, E, S))
##        tframe.columnconfigure(0, weight=1)
##        tframe.rowconfigure(0, weight=1)
        nombre = StringVar()
        idioma = StringVar()
        server = StringVar()
        foldername = StringVar()
        idioma.set(opciones[2])
        server.set(opciones[5])
        foldername.set(opciones[3])
        try:
            nombre.set(opciones[4])
        except:
            pass

        ttk.Label(cframe, text=dic[07]).grid(column=1, row=1, sticky=(W))
        ttk.Label(cframe, text=dic[8]).grid(column=1,columnspan=4, row=2, sticky=(W))
        entrada_nombre = ttk.Entry(cframe, width=25, textvariable=nombre)
        entrada_nombre.grid(column=2, row=1,columnspan=3, sticky=(W, E))
        ttk.Label(cframe, text=dic[46]).grid(column=1, row=3, sticky=(W))
        ttk.Radiobutton(cframe, text='NA', variable=server, value='na').grid(column=2, row=3, sticky=(W))
        ttk.Radiobutton(cframe, text='EUW', variable=server, value='euw').grid(column=3, row=3, sticky=(W))
        ttk.Radiobutton(cframe, text='EUNE', variable=server, value='eune').grid(column=4, row=3, sticky=(W))
        ttk.Label(cframe, text='-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -').grid(column=1,columnspan=4, row=4, sticky=())
        ttk.Label(cframe, text=dic[40]).grid(column=1, row=5, sticky=(W))
        ttk.Label(cframe, textvariable=foldername).grid(column=2,columnspan=2, row=5, sticky=(W))
        botonfolder=ttk.Button(cframe, text=dic[41], command=lambda: cambiarfolder(foldername))
        botonfolder.grid(column=4, row=5)
        ttk.Label(cframe, text='-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -').grid(column=1,columnspan=4, row=6, sticky=())
        ttk.Label(cframe, text=dic[36]).grid(column=1, row=7, sticky=(W))
        ttk.Radiobutton(cframe, text=dic[37], variable=idioma, value=1).grid(column=2, row=7, sticky=(W))
        ttk.Radiobutton(cframe, text=dic[38], variable=idioma, value=0).grid(column=3, row=7, sticky=(W))
        ttk.Label(cframe, text='-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -').grid(column=1,columnspan=4, row=8, sticky=())
        ttk.Label(cframe, text=dic[9]).grid(column=1, row=9, sticky=(W))
        ttk.Label(cframe, text="{0}".format(version)).grid(column=2, row=9, sticky=(W))
        ttk.Label(cframe, text=dic[10]).grid(column=1,columnspan=4, row=10, sticky=(W))
        botonguardaropciones=ttk.Button(cframe, text=dic[11], command= lambda: guardaropciones(nombre,c,idioma,server))
        botonguardaropciones.grid(column=1,columnspan=4, row=11)

        for child in cframe.winfo_children(): child.grid_configure(padx=8, pady=8)
        entrada_nombre.focus()
        c.mainloop()
    except:
        textoinfo.set(dic[01])
        pass


def mostrarinfo(*args):
    try:
        #esta linea se borra
##        global jugadores
        t = Toplevel(root)
        t.title("LoL Stats - Game History")
        t.geometry('-10+50')
        tframe = ttk.Frame(t, padding="20 0 20 20")
        tframe.grid(column=0, row=0, sticky=(N, W, E, S))
##        tframe.columnconfigure(0, weight=1)
##        tframe.rowconfigure(3, weight=1)
##        prueba = StringVar()
##        prueba.set('Prueba')
        fuente='Sans-serif'
        tamano='10'
        ttk.Label(tframe, text=dic[12], font="{0} {1} bold".format(fuente,tamano)).grid(column=1, row=1, sticky=(W), ipady=15)
        ttk.Label(tframe, text='ELO', font="{0} {1} bold".format(fuente,tamano)).grid(column=2, row=1, sticky=(W))
        ttk.Label(tframe, text=dic[44], font="{0} {1} bold".format(fuente,tamano)).grid(column=3, columnspan=5, row=1, sticky=())
        ttk.Label(tframe, text=dic[13], font="{0} {1} bold".format(fuente,tamano)).grid(column=8, columnspan=2, row=1, sticky=(W))
##        ttk.Label(tframe, text=dic[14], font="{0} {1} bold".format(fuente,tamano)).grid(column=9, row=1, sticky=(W))
        ttk.Label(tframe, text=dic[15], font="{0} {1} bold".format(fuente,tamano)).grid(column=10, columnspan=2, row=1, sticky=(W))
##        ttk.Label(tframe, text=dic[16], font="{0} {1} bold".format(fuente,tamano)).grid(column=11, row=1, sticky=(W))
        ttk.Label(tframe, text=dic[17], font="{0} {1} bold".format(fuente,tamano)).grid(column=12, row=1, sticky=(W))
        ttk.Label(tframe, text=dic[18], font="{0} {1} bold".format(fuente,tamano)).grid(column=13, columnspan=2,row=1, sticky=(W))

##        im = Image.open('Akali.jpeg')
##        tkim = ImageTk.PhotoImage(im)
##        ttk.Label(tframe, image=tkim).grid(column=1, row=1, sticky=(W))
##        Esto se borra
##        jugadores=['LuisOnOff','Pepe','Lucas','Ermenegildo','a87sd']
        hab={0:dic[19],1:dic[20],-1:dic[21],-2:dic[22],2:dic[23]}
        trolo={0:'-',1:'TROLL'}
        afk={0:'-',1:'AFK'}
        tkimage=[0]*25
##        infojugadores=[['No Team', 'Unranked', 'No Team', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ['No Team', 'Unranked', 'No Team', 'Wukong', 1, 0, 'Amumu', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1295, 'Unranked', 1254, 'Heimerdinger', 6, 50, 'Caitlyn', 1, 100, 'Nunu', 1, 0, 'Tristana', 1, 0, 0, 0, 0], 0, 0]
##        im = Image.open('Akali.jpeg')
        for i in range(len(jugadores)):
            ttk.Label(tframe, text=jugadores[i]).grid(column=1, row=i+2, sticky=(W))
            try:
                ttk.Label(tframe, text=infojugadores[i][1]).grid(column=2, row=i+2, sticky=(W))
            except:
                ttk.Label(tframe, text=dic[45]).grid(column=2, row=i+2, sticky=(W))
            for h in range(5):
                try:
                    im = Image.open('Champions/medium_siespacio/{0}.jpg'.format(infojugadores[i][3+3*h]))
                    tkimage[i] = ImageTk.PhotoImage(im)
                    label=Label(tframe, image=tkimage[i])
                    label.image=tkimage[i]
                    label.grid(column=3+h, row=i+2, sticky=(N), ipady=18)#Determina la altura de las filas
                    if infojugadores[i][5+3*h]>=50:
                        ttk.Label(tframe, text='P:{0}  V:{1}%'.format(infojugadores[i][4+3*h],infojugadores[i][5+3*h]),foreground="dark green").grid(column=3+h, row=i+2, sticky=(S))
                    else:
                        ttk.Label(tframe, text='P:{0}  V:{1}%'.format(infojugadores[i][4+3*h],infojugadores[i][5+3*h]),foreground="red").grid(column=3+h, row=i+2, sticky=(S))
                    
                except:
                    pass
##            label=ttk.Label(tframe, image=tkimage[i]).grid(column=3, row=i+2, sticky=(W))
##            label.image=tkimage[i]
            if jugadores[i] in historial:
                try:
                    por1=int((historial[jugadores[i]][1])/(historial[jugadores[i]][0])*100)
                except:
                    por1='-'
                try:
                    por2=int((historial[jugadores[i]][3])/(historial[jugadores[i]][2])*100)
                except:
                    por2='-'
                
                ttk.Label(tframe, text=historial[jugadores[i]][0]).grid(column=8, row=i+2, sticky=(E))
                if por1=='-':
                    ttk.Label(tframe, text="{0}  %".format(por1)).grid(column=9, row=i+2, sticky=())
                elif por1<50:
                    ttk.Label(tframe, text="{0}  %".format(por1),foreground="red").grid(column=9, row=i+2, sticky=())
                else:
                    ttk.Label(tframe, text="{0}  %".format(por1),foreground="dark green").grid(column=9, row=i+2, sticky=())
                ttk.Label(tframe, text=historial[jugadores[i]][2]).grid(column=10, row=i+2, sticky=(E))
                if por2=='-':
                    ttk.Label(tframe, text="{0}  %".format(por2)).grid(column=11, row=i+2, sticky=())
                elif por2<50:
                    ttk.Label(tframe, text="{0}  %".format(por2),foreground="red").grid(column=11, row=i+2, sticky=())
                else:
                    ttk.Label(tframe, text="{0}  %".format(por2),foreground="dark green").grid(column=11, row=i+2, sticky=())
                ttk.Label(tframe, text=hab[historial[jugadores[i]][4]]).grid(column=12, row=i+2, sticky=())
                ttk.Label(tframe, text=trolo[historial[jugadores[i]][5]]).grid(column=13, row=i+2, sticky=())
                ttk.Label(tframe, text=afk[historial[jugadores[i]][6]]).grid(column=14, row=i+2, sticky=())
                
            else:
                ttk.Label(tframe, text=0).grid(column=8, row=i+2, sticky=(E))
                ttk.Label(tframe, text="-").grid(column=9, row=i+2, sticky=())
                ttk.Label(tframe, text=0).grid(column=10, row=i+2, sticky=(E))
                ttk.Label(tframe, text="-").grid(column=11, row=i+2, sticky=())
                ttk.Label(tframe, text=dic[19]).grid(column=12, row=i+2, sticky=())
                ttk.Label(tframe, text='-').grid(column=13, row=i+2, sticky=())
                ttk.Label(tframe, text='-').grid(column=14, row=i+2, sticky=())
            

        for child in tframe.winfo_children(): child.grid_configure(padx=2, pady=5) 

##        t.mainloop() 
    except:
        textoinfo.set(dic[01])
        pass



def terminainiciar(*args):
    try:
        botoniniciar["text"]=dic[24]
        botoniniciar["command"]=detener
        botonfin["state"]=NORMAL
        textoinfo.set(dic[48])
    except:
        textoinfo.set(dic[01])
##        print 'error'
        pass

def subirventanas(*args):
    try:
        indexmain= win32gui.FindWindow(None,'LoL Stats')
        win32gui.SetForegroundWindow(indexmain)

    except:
        textoinfo.set(dic[01])
        pass

def detener(*args):
    try:
        botoniniciar["text"]=dic[26]
        botoniniciar["command"]=seleccioncampeon
        botonfin["state"]=DISABLED
        textoinfo.set(dic[02])
    except:
        textoinfo.set(dic[01])
        pass

def todosjugadores(*args):
    try:
        global jugadores,campeonnow
        directory=opciones[3]+'/Logs/Game - R3d Logs/'
        files = os.listdir(directory)
        ##def find_most_recent(directory, partial_file_name):
##        directorys=["C:/Riot Games/League of Legends/Logs/Game - R3d Logs/",
##                    "D:/Riot Games/League of Legends/Logs/Game - R3d Logs/",
##                    "E:/Riot Games/League of Legends/Logs/Game - R3d Logs/"]
##        for i in range(3):
##            try:
### list all the files in the directory
##                files = os.listdir(directorys[i])
##                j=i
##            except:
##                pass
 
# remove all file names that don't match partial_file_name string
##files = filter(lambda x: x.find(partial_file_name) > -1, files)

# create a dict that contains list of files and their modification timestamps
        name_n_timestamp = dict([(x, os.stat(directory+x).st_mtime) for x in files])
 
# return the file with the latest timestamp
        archivo=max(name_n_timestamp, key=lambda k: name_n_timestamp.get(k))


        f = open (directory+archivo,"r")
##f = open ("C:/Riot Games/League of Legends/Logs/Game - R3d Logs/2012-09-07_21-01-12_r3dlog.txt","r")

##line = f.readline().decode('utf8')
        line = f.readline()
        campeonnow=[]
        jugadores=[]
        while line:
##            Se dan casos en los que el fichero contiene varias veces los nombres de jugadores. Reconexion?
            if len(jugadores)==10:
                break
            index=line.find("created for")
            if index>0:
                line=line.split()
                index2=line.index('created')
                campeonnowtemp=line[index2-1]
                index3=len(campeonnowtemp)
                campeonnow.append(campeonnowtemp[0:index3-3])
                resta=len(line)-(index2+2)
                jug=[]
                for i in range(resta):
                    jug.append(line[index2+2+i])
                for i in range(1,len(jug)):
                    jug[-i-1]=jug[-i-1]+' '+jug[-i]
                jugadores.append(jug[0])
##    line = f.readline().decode('utf8')
            line = f.readline()
##        print jugadores
##        Unidecode todos los strings de jugadores
        for j in range(len(jugadores)):
            jugadores[j]=unidecode(jugadores[j])

    except:
        textoinfo.set(dic[42])
        pass

def guardarinfo(*args):
    try:
        global historial
        venjug.destroy()
        ##        De prueba en vdd estara vacio
##        historial={'LuisOnOff':[1,1,3,3,0,0,0],'Pepe':[20,9,5,2,0,0,0]}
##        Almaceno informacion en variable historial y luego copio historial al fichero
        for i in range(len(jugadores)):
            if jugadores[i] in historial:
                historial[jugadores[i]][4]=int(round((historial[jugadores[i]][4]+int(puntuacion[i].get()))/2))
                if troll[i].get()=='1':
                    historial[jugadores[i]][5]=1
                else:
                    historial[jugadores[i]][5]=0
                if leaver[i].get()=='1':
                    historial[jugadores[i]][6]=1
                else:
                    historial[jugadores[i]][6]=0
            else:
##                Esto en vdd no se deberia ejecutar nunca
##                print 'Se ha ejecutado algo que no deberia ejecutarse nunca.'
                historial[jugadores[i]] = [0,0,0,0,0,0,0]
                historial[jugadores[i]][4]=int(round((historial[jugadores[i]][4]+int(puntuacion[i].get()))/2))
                if troll[i].get()=='1':
                    historial[jugadores[i]][5]=1
                else:
                    historial[jugadores[i]][5]=0
                if leaver[i].get()=='1':
                    historial[jugadores[i]][6]=1
                else:
                    historial[jugadores[i]][6]=0

        file = open('historial.txt', 'w')
        pickle.dump(historial, file)
        file.close()
##        print historial
        textoinfo.set(dic[27])
    except:
        textoinfo.set(dic[01])

        pass

def puntuarjug(equipo1,equipo2):
##    try:
        #esta linea se borra
##        global jugadores
        global venjug,troll,leaver,puntuacion
        venjug = Toplevel(root)
        venjug.title("LoL Stats - Rate Players")
        venjug.geometry('-5+50')
        jframe = ttk.Frame(venjug, padding="20 20 20 20")
        jframe.grid(column=0, row=0, sticky=(N, W, E, S))
##        tframe.columnconfigure(0, weight=1)
##        tframe.rowconfigure(0, weight=1)
        ttk.Label(jframe, text=dic[28]).grid(column=1, row=1,columnspan=9, sticky=())
        ttk.Label(jframe, text=dic[12]).grid(column=1, row=2,columnspan=2, sticky=())
        ttk.Label(jframe, text=dic[29]).grid(column=3, row=2,columnspan=5, sticky=())
        ttk.Label(jframe, text=dic[18]).grid(column=8, row=2,columnspan=2, sticky=())

        troll=[0,0,0,0,0,0,0,0,0,0]
        leaver=[0,0,0,0,0,0,0,0,0,0]
        puntuacion=[0,0,0,0,0,0,0,0,0,0]
        j=3
        for i in equipo1:
            try:
                im = Image.open('Champions/small_noespacio/{0}.jpg'.format(campeonnow[i]))
                tkimage = ImageTk.PhotoImage(im)
                label=Label(jframe, image=tkimage)
                label.image=tkimage
                label.grid(column=1, row=j, sticky=(W), ipady=0)#Determina la altura de las filas
            except:
                pass
            ttk.Label(jframe, text=jugadores[i]).grid(column=2, row=j, sticky=(W))
            puntuacion[i] = StringVar()
            puntuacion[i].set(0)
            ttk.Radiobutton(jframe, text=dic[21], variable=puntuacion[i], value=-1).grid(column=4, row=j, sticky=())
            ttk.Radiobutton(jframe, text=dic[19], variable=puntuacion[i], value=0).grid(column=5, row=j, sticky=())
            ttk.Radiobutton(jframe, text=dic[20], variable=puntuacion[i], value=1).grid(column=6, row=j, sticky=())
            ttk.Radiobutton(jframe, text=dic[22], variable=puntuacion[i], value=-2).grid(column=3, row=j, sticky=())
            ttk.Radiobutton(jframe, text=dic[23], variable=puntuacion[i], value=2).grid(column=7, row=j, sticky=())

            troll[i] = StringVar()
            ttk.Checkbutton(jframe, text='Troll', variable=troll[i]).grid(column=8, row=j, sticky=())
            leaver[i] = StringVar()
            ttk.Checkbutton(jframe, text='AFK', variable=leaver[i]).grid(column=9, row=j, sticky=())
            j+=1
##            ttk.Checkbutton(parent, text='Use Metric', command=metricChanged, variable=measureSystem,onvalue='metric', offvalue='imperial')

        ttk.Label(jframe, text=dic[30]).grid(column=1, row=8,columnspan=9, sticky=())
        ttk.Label(jframe, text=dic[12]).grid(column=1, row=9,columnspan=2, sticky=())
        ttk.Label(jframe, text=dic[29]).grid(column=3, row=9,columnspan=5, sticky=())
        ttk.Label(jframe, text=dic[18]).grid(column=8, row=9,columnspan=2, sticky=())
        j=10
        for i in equipo2:
            try:
                im = Image.open('Champions/small_noespacio/{0}.jpg'.format(campeonnow[i]))
                tkimage = ImageTk.PhotoImage(im)
                label=Label(jframe, image=tkimage)
                label.image=tkimage
                label.grid(column=1, row=j, sticky=(W), ipady=0)#Determina la altura de las filas
            except:
                pass
            
            ttk.Label(jframe, text=jugadores[i]).grid(column=2, row=j, sticky=(W))
            puntuacion[i] = StringVar()
            puntuacion[i].set(0)
            ttk.Radiobutton(jframe, text=dic[21], variable=puntuacion[i], value=-1).grid(column=4, row=j, sticky=())
            ttk.Radiobutton(jframe, text=dic[19], variable=puntuacion[i], value=0).grid(column=5, row=j, sticky=())
            ttk.Radiobutton(jframe, text=dic[20], variable=puntuacion[i], value=1).grid(column=6, row=j, sticky=())
            ttk.Radiobutton(jframe, text=dic[22], variable=puntuacion[i], value=-2).grid(column=3, row=j, sticky=())
            ttk.Radiobutton(jframe, text=dic[23], variable=puntuacion[i], value=2).grid(column=7, row=j, sticky=())

            troll[i] = StringVar()
            ttk.Checkbutton(jframe, text='Troll', variable=troll[i]).grid(column=8, row=j, sticky=())
            leaver[i] = StringVar()
            ttk.Checkbutton(jframe, text='AFK', variable=leaver[i]).grid(column=9, row=j, sticky=())
            j+=1

        botonguardar=ttk.Button(jframe, text=dic[11], command=guardarinfo)
        botonguardar.grid(column=1,columnspan=9, row=20)
        for child in jframe.winfo_children(): child.grid_configure(padx=5, pady=5)        
##        venjug.mainloop()
##        return troll,leaver,puntuacion
##    except:
####        print 'Error'
##        textoinfo.set(dic[01])
##        pass

def finpartida(*args):
    try:
        global historial
        todosjugadores()
        x=tkMessageBox.askquestion(title='LoL Stats',message=dic[31],icon='question')

##        Almaceno informacion en variable historial y luego copio historial al fichero
##        if opciones[0] in jugadores:
        distmin=8
        ratiomax=0
        for i in range(len(jugadores)):
            ratiotemp=Levenshtein.ratio(jugadores[i],opciones[0])
            disttemp=Levenshtein.distance(jugadores[i],opciones[0])
            if ratiotemp>0.3 and disttemp<distmin:
                j=i
                ratiomax=ratiotemp
                distmin=disttemp
            elif ratiotemp>0.3 and disttemp==distmin and ratiotemp>ratiomax:
                j=i
                ratiomax=ratiotemp
                distmin=disttemp
        if distmin<8:
            indice=j
##            indice=jugadores.index(opciones[0])
            if indice<5:
                equipo1=[0,1,2,3]
                equipo2=[4,5,6,7,8]
            else:
                equipo1=[5,6,7,8]
                equipo2=[0,1,2,3,4]
##        Ahora guardo jugador para saber partidas jugadas totales y % victorias
            if jugadores[indice] in historial:
                historial[jugadores[indice]][0]+=1
            else:
                historial[jugadores[indice]] = [1,0,0,0,0,0,0]
            if x=='yes':
                historial[jugadores[indice]][1]+=1
            jugadores.remove(jugadores[indice])
            campeonnow.remove(campeonnow[indice])
            textoinfo.set(dic[32])
        else:
            equipo1=[0,1,2,3,4]
            equipo2=[5,6,7,8,9]
            textoinfo.set(dic[33])
##        #Primero aliados
        for i in equipo1:
            if jugadores[i] in historial:
                historial[jugadores[i]][0]+=1
            else:
                historial[jugadores[i]] = [1,0,0,0,0,0,0]
            if x=='yes':
                historial[jugadores[i]][1]+=1
##        Luego enemigos
        for i in equipo2:
            if jugadores[i] in historial:
                historial[jugadores[i]][2]+=1
            else:
                historial[jugadores[i]] = [0,0,1,0,0,0,0]
            if x=='yes':
                historial[jugadores[i]][3]+=1

        
        file = open('historial.txt', 'w')
        pickle.dump(historial, file)
        file.close()
##        Muestro ventana para puntuar
        puntuarjug(equipo1,equipo2)
##        Preparo para siguiente partida

        botoniniciar["text"]=dic[26]
        botoniniciar["command"]=seleccioncampeon
        botonfin["state"]=DISABLED
    except:
        textoinfo.set(dic[42])
##        textoinfo.set('ERROOOOOR')
        pass

def botoncorregirnombres(*args):
    try:
        global jugadores
        for i in range(len(jugadores)):
            if jugadores[i]!=jugadoresocr[i].get():
                jugadores[i]=jugadoresocr[i].get()
        nm.destroy()
        obteninfo()
        mostrarinfo()
        textoinfo.set(dic[25])
        subirventanas()
    except:
        textoinfo.set(dic[01])
        pass
    
def seleccioncampeon(*args):
    try:
        esquinas=esquinaspantalla()
        imprimepantalla()
        cortaimagen(esquinas)
        ocr(esquinas)
##        leerhistorial()
##        mejoraocr()
        nombresmanual()
##        obteninfo()
##        mostrarinfo()
##        terminainiciar()
        subirventanas()
        terminainiciar()
    except:
        textoinfo.set(dic[01])
##        print 'error'
        pass

##window.geometry('300x200-5+40')
####para ordenarlas
##window.lift()
##window.lift(otherwin)
##window.lower()
##window.lower(otherwin)
    
######    EMPIEZA PROGRAMA
##    Inicializo variables
global version, root
version=0.65



##Leo diccionario
leerdic()

## Empieza pantalla principal
root = Tk()
root.title("LoL Stats")
root.iconbitmap(default="lolicon.ico")
root.geometry('-5-50')
##root.geometry('450x100-5-5')
mainframe = ttk.Frame(root, padding="6 6 6 6")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

textoinfo = StringVar()
textoinfo.set(dic[02])
##textoinfo.set('Pulsa INICIAR cuando ya estes en la ventana de seleccion de campeon.')

ttk.Label(mainframe, textvariable=textoinfo, wraplength=300).grid(column=1, row=2, columnspan=3, sticky=())
botoniniciar=ttk.Button(mainframe, text=dic[26], command=seleccioncampeon)
botoniniciar.grid(column=1, row=1)
botonfin=ttk.Button(mainframe, text=dic[34], state=DISABLED, command=finpartida)
botonfin.grid(column=2, row=1)
botonconfig=ttk.Button(mainframe, text=dic[35], command=opciones)
botonconfig.grid(column=3, row=1)
    

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)



##Compruebo actualizaciones
comprobarversion()

##Leo historial
leerhistorial()

##Cargo opciones
cargaropciones()

##Compruebo historial grande
comprobarhistorialgrande()

root.mainloop()
